
import config from "@/config/index.js";
//定义全局请求路径
import {
	util
} from "./tools.js"
import mpSDKChannel from "./mpSDKChannel.js";
import { http } from '@/interceptor/luch-request/index.js' // 全局挂载引入，配置相关在该index.js文件里修改
const globals = {
	install(Vue) {
		//用户缓存
		Vue.prototype.$util = util;
		Vue.prototype.$mpSDK = mpSDKChannel;
		Vue.prototype.$isMPSDK = false;
		Vue.prototype.$isMPSDK=false;
		Vue.prototype.$isPermission=function(name) {
					const permission =util.getUser().perms || [];
					// this.$util.getUser().perms
					//超级管理员拥有所有权限
					return permission.indexOf(name) >-1
				};
		http.config.baseUrl = config.URL;
		 uni.setStorageSync('baseurl',config.URL)
		 uni.setStorageSync('token',util.getUser().accessToken);
		http.interceptor.request((config, cancel) => { /* 请求之前拦截器 */
		  console.log("config请求拦截器", config);
		  
		 // if(util.getUser().accessToken){
			config.header = {
			  ...config.header,
			  Authorization: util.getUser().accessToken
						// 'content-type': "application/x-www-form-urlencoded"
			}; 
		 // }else{
			//  uni.redirectTo({
			//  	url:'/pages/login/index'
			//  })
		 // }
		  
			
		  /*
		  if (!token) { // 如果token不存在，调用cancel 会取消本次请求，但是该函数的catch() 仍会执行
		    cancel('token 不存在') // 接收一个参数，会传给catch((err) => {}) err.errMsg === 'token 不存在'
		  }
		  */
		 console.log("config请求拦截器6666", util.getUser());
		  return config
		});
		http.interceptor.response((response) => { /* 对响应成功做点什么 （statusCode === 200），必须return response*/
		  //  if (response.data.code !== 200) { // 服务端返回的状态码不等于200，则reject()
		  //    return Promise.reject(response)
		  //  }
		 // if (response.config.custom.verification) { // 演示自定义参数的作用
		  //   return response.data
		  // }
		  console.log('响应拦截',response)
		  if(response.data.code=='7700'){
			  uni.showToast({
				  title:'登录超时，请重新登录',
				  icon:'none',
				  duration:2000,
				  mask:true,
				  success(){
				   	setTimeout(function() {
						uni.redirectTo({
							url:'/pages/login/index'
						})
				   		// uni.sendNativeEvent('loginout', {
				   		// 	message: 'loginout'
				   		// }, ret => {
				   		// 	//this.nativeMsg = '宿主App回传的数据：' + ret;  
				   		// })
						
				   		uni.clearStorageSync();
				   	},2000)
				   }
			  })
			  
		     // this.$api.showTip("账号出现异常，请重新登录",()=>{
		     //  this.$mpSDK.loginout();
		     //  this.$util.clearCache();
		     //  // uni.redirectTo({
		     //  //  url: '@/pages/login/login'
		     //  // });
		     // });
		   }else if(response.data.code=='5999'){
			   uni.showToast({
			   		  title:'服务器连接超时',
			   		  icon:'none',
			   		  duration:2000,
			   		  mask:true,
					  })
		   }
		  return response
		}, (response) => { /*  对响应错误做点什么 （statusCode !== 200），必须return response*/
		  console.log(response)
		  return response
		});
		
		Vue.prototype.$hasPermission = function hasPermission(name) {
			const permission = ['graceAdd'] || [];
			// this.$util.getUser().perms
			//超级管理员拥有所有权限
			return permission.indexOf(name) > -1
		};
		
		Vue.prototype.$config = config;
		Vue.prototype.$http = {
			domain: 'http://dd.ahchdz.cn',
			defaultConfg: {
				header: {
					//大部分默认的提交方式
					"Content-Type": "application/x-www-form-urlencoded"
				},
				//远程仓库获取证书设为false
				sslVerify: false
			},
			//定义post
			post(url, data, option) {
				return this.request('POST', url, data, option);
			},
			//定义get
			get(url, data, option) {
				return this.request('GET', url, data, option);
			},
			//定义request请求
			request(method, url, data, option) {
				let _this = this;

				return new Promise((resolve, reject) => {
					let confg = Object.assign(_this.defaultConfg, option, {
						data,
						method,
						url: `${_this.domain}${url}`,
						success: (res) => {
							return resolve(res);
						},
						fail: (res) => {
							return reject(res);
						}
					});

					uni.request(confg);
				})
			}
		}

		Vue.prototype.$api = {
			showModalWithCloseButton(content, closeFn, title = '温馨提示', confirmText = '关闭') {

				uni.showModal({
					title,
					content,
					confirmText,
					showCancel: false,
					success: function(res) {

						if (res.confirm) {
							if (closeFn && typeof closeFn == 'function') {
								closeFn();
							}
						}
					}
				});
			},

			showTip(title, callback, duration = 1500, mask = false, icon = 'none') {

				if (Boolean(title) === false || !title) return;

				uni.showToast({
					title,
					duration,
					mask,
					icon
				});

				let timer = setTimeout(() => {

					if (callback && isFunction(callback)) {
						callback();
					}

					if (timer) {
						clearTimeout(timer);
					}
				}, duration);

				function isFunction(func) {
					return typeof func == 'function';
				}
			}
		}
	}
};
export default globals;
